Day 9: 함수 심화
*args (가변 위치 인수)
def total(*args):
return sum(args)
print(total(1, 2, 3)) # 6
print(total(10, 20, 30, 40)) # 100
**kwargs (가변 키워드 인수)
def build_profile(**kwargs):
return {k: v for k, v in kwargs.items()}
profile = build_profile(name="철수", age=25, city="서울")
print(profile) # {'name': '철수', 'age': 25, 'city': '서울'}
인수 순서 규칙
def func(pos, *args, key="default", **kwargs):
print(f"pos={pos}, args={args}, key={key}, kwargs={kwargs}")
func(1, 2, 3, key="custom", extra="value")
# pos=1, args=(2, 3), key=custom, kwargs={'extra': 'value'}
람다 함수
이름 없는 한 줄 함수입니다.
square = lambda x: x ** 2
add = lambda a, b: a + b
print(square(5)) # 25
print(add(3, 4)) # 7
고차 함수: map, filter, sorted
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # [2, 4, 6, 8, 10]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # [2, 4]
students = [("철수", 85), ("영희", 92), ("민수", 78)]
ranked = sorted(students, key=lambda s: s[1], reverse=True)
print(ranked) # [('영희', 92), ('철수', 85), ('민수', 78)]
오늘의 연습문제
- 여러 개의 리스트를 받아 하나로 합치는 함수를
*args로 만드세요. map과lambda를 사용하여 문자열 리스트의 각 단어 길이 리스트를 만드세요.filter로 딕셔너리 리스트에서 특정 조건을 만족하는 항목만 추출하세요.